{ "cells": [ { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "# Dealing with multiple feeds\n" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "In some cases the fed-batch process uses multiple feeding mediums. This is typically the case in cultivation of mammalians cells. This tutorial will show how to use the pseudo batch transformation to handle multiple feeding mediums. We will, again, use simulated data to showcase the workflow. This fed-batch process seeks to mimic a cultivation of mammalians cells. These simulated cells require two substrates to grow; glucose and glutamine. The bioreactor is fed with two different feed mediums, one containing concentrated glucose and one complex medium that contain glucose, and glutamine. Furthermore, the feeding is not done through a \"continuous\" exponential feed, but instead as pulse feed, i.e. at certain time points a given volume of each feed is added to the bioreactor.\n", "\n", "In the simulation 12 samples are drawn over the course of the fermentation and 0.1 hours after each sample feed is added." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "First we will setup the environment and load the data." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/Users/s143838/.virtualenvs/pseudobatch-dev/lib/python3.10/site-packages/tqdm/auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html\n", " from .autonotebook import tqdm as notebook_tqdm\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "{'stan_version_major': '2', 'stan_version_minor': '29', 'stan_version_patch': '2', 'STAN_THREADS': 'false', 'STAN_MPI': 'false', 'STAN_OPENCL': 'false', 'STAN_NO_RANGE_CHECKS': 'false', 'STAN_CPP_OPTIMS': 'false'}\n" ] } ], "source": [ "import matplotlib.pyplot as plt\n", "import numpy as np\n", "\n", "from pseudobatch import pseudobatch_transform_pandas\n", "from pseudobatch.datasets import load_cho_cell_like_fedbatch\n", "from pseudobatch.datasets._dataloaders import _prepare_simulated_dataset" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "fedbatch_df_measurement = load_cho_cell_like_fedbatch(sampling_points_only=True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Inspect the dataset" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "First, let's quickly inspect the dataframe" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", " | timestamp | \n", "sample_volume | \n", "c_Biomass | \n", "c_Glucose | \n", "c_Product | \n", "v_Volume | \n", "v_Feed_accum1 | \n", "v_Feed_accum2 | \n", "
---|---|---|---|---|---|---|---|---|
0 | \n", "10.0 | \n", "170.0 | \n", "1.644817 | \n", "47.882089 | \n", "0.940479 | \n", "1000.0 | \n", "0.0 | \n", "0.0 | \n", "
1 | \n", "16.0 | \n", "170.0 | \n", "3.007637 | \n", "50.337209 | \n", "2.106177 | \n", "935.0 | \n", "100.0 | \n", "5.0 | \n", "
2 | \n", "22.0 | \n", "170.0 | \n", "5.466735 | \n", "50.535418 | \n", "4.170358 | \n", "870.0 | \n", "200.0 | \n", "10.0 | \n", "
3 | \n", "28.0 | \n", "170.0 | \n", "9.758328 | \n", "47.107608 | \n", "7.737765 | \n", "805.0 | \n", "300.0 | \n", "15.0 | \n", "
4 | \n", "34.0 | \n", "170.0 | \n", "16.782229 | \n", "38.381155 | \n", "13.547532 | \n", "740.0 | \n", "400.0 | \n", "20.0 | \n", "